package com.futu.attraction.service;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.futu.attraction.config.AmapConfig;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.io.IOException;

@Service
public class AmapSearchService {
    @Resource
    private AmapConfig amapConfig; // 注入高德 Key 配置

    private static final String SEARCH_URL = "https://restapi.amap.com/v3/place/text";
    private static final int DEFAULT_PAGE_SIZE = 10; // 每页返回结果数

    /**
     * 景点搜索（关键词搜索）
     * @param keyword 景点名称（如"故宫"）
     * @param city    城市（可选，为空时全国搜索）
     * @return 景点信息列表（经纬度、名称、地址）
     */
    public JSONArray searchAttraction(String keyword, String city) throws IOException {
        if (StringUtils.isEmpty(keyword)) {
            throw new IllegalArgumentException("关键词不能为空");
        }

        OkHttpClient client = new OkHttpClient();
        Request.Builder requestBuilder = new Request.Builder()
                .url(buildSearchUrl(keyword, city));

        Request request = requestBuilder.build();
        Response response = client.newCall(request).execute();

        if (!response.isSuccessful()) {
            throw new IOException("高德API请求失败, 状态码:"  + response.code());
        }

        String responseBody = response.body().string();
        JSONObject result = JSONObject.parseObject(responseBody);

        // 解析结果：检查是否有有效数据
        JSONArray resultArray = new JSONArray();
        if ("1".equals(result.getString("status")) && result.getJSONArray("pois").size() > 0) {
            JSONArray pois = result.getJSONArray("pois");
            // 返回多个搜索结果（最多5个）
            int resultCount = Math.min(pois.size(), 5);
            for (int i = 0; i < resultCount; i++) {
                JSONObject poi = pois.getJSONObject(i);
                resultArray.add(extractPoiInfo(poi));
            }
        }
        return resultArray; // 返回结果数组，如果没有结果则为空数组
    }

    /**
     * 构建搜索URL
     */
    private String buildSearchUrl(String keyword, String city) {
        StringBuilder url = new StringBuilder(SEARCH_URL);
        url.append("?key=").append(amapConfig.getKey())
           .append("&keywords=").append(keyword)
           .append("&types=110000") // 限定为景点类型（110000 是景点分类编码）
           .append("&offset=5") // 返回5条结果
           .append("&page=1")
           .append("&output=json");
        if (!StringUtils.isEmpty(city)) {
            url.append("&city=").append(city);
        }
        return url.toString();
    }

    /**
     * 提取景点关键信息
     */
    private JSONObject extractPoiInfo(JSONObject poi) {
        JSONObject info = new JSONObject();
        info.put("name", poi.getString("name")); // 景点名称
        info.put("location", poi.getString("location")); // 经纬度（格式：lng,lat）
        info.put("address", poi.getString("address")); // 地址
        info.put("cityname", poi.getString("cityname")); // 城市名
        return info;
    }
}